// import baseUrl from "constants/env";
// import { cos } from "mathjs";
import VueCookies from "vue-cookies";
import moment from "moment";
import cache from "@/utils/cache";
import queryString from "query-string";
import { removeHtmltag } from "./utils";

export const encode = (str) => {
  // 对字符串进行编码
  let encode = window.encodeURIComponent(str);
  // 对编码的字符串转化base64
  let base64 = window.btoa(encode);
  return base64;
};
/**
 * base64转字符串
 */
export const decode = (base64) => {
  // 对base64转编码
  let decode = window.atob(base64);
  // 编码转字符串
  let str = window.decodeURIComponent(decode);
  return str;
};

/**
 *
 * @param {文件下载} options

url	下载资源的url地址，同时支持https、http、ftp、sftp等
headers	对于http/https的资源，可以在资源下载时指定请求头
method	下载请求时的方法，默认为GET，可以选择GET/POST，大部分情况应该以GET为主
data	下载资源时向后台发送的参数数据，如果为GET请求，则在url中追加，如果POST请求在以请求体内数据发送的方式提交
success	请求下载成功时的回调
error	下载失败时的回调
progress	下载进度更新时的回调

 */

export const downloadfile = (options = {}) => {
  try {
    if (!(options.url || options.nativeUrl)) {
      return false;
    }
    let { url, filename, nativeUrl, postData, method } = options;
    if (!url || url.indexOf("http") == -1) {
      url = `${window.location.origin}${nativeUrl}`;
    }

    const param = {
      url,
      filename: removeHtmltag(filename) || "filename",
      directory: "D:\\xhfdownload",
      method: method || "get",
      postData: postData || "{}",
    };
    ucf.api.net.download(param);
  } catch (error) {
    console.log("网页下载文件" + error);
    let { postData, method, postMethod } = options;
    console.log(options, "options");
    if (method == "post") {
      if (options.utilsUrl) {
        postMethod(JSON.parse(postData), options.utilsUrl).then((res) => {
          window.open(res);
        });
      } else {
        postMethod(JSON.parse(postData)).then((res) => {
          window.open(res);
        });
      }
    } else {
      window.open(options.url);
    }
  }
};
/**
 *
 * @param {调用客户端方法打开新页面} options
 * options：{
 *  url:"",
 *  width:""窗体的宽度
 *  height:""窗体的高度
 *  title:"" 新打开窗体的标题
 *  group:""  打开新窗体所在的分组，如果存在分组则以tab窗体方式加载
 * }
 */

export const openpage = (options = null) => {
  if (!options) {
    return false;
  }
  try {
    ucf.api.platform.openPage(options);
  } catch (error) {
    window.open(options.url);
  }
};

/**
 * 获取框架涨跌色设置
 */
export const getRiseColor = () => {
  return new Promise((resolve) => {
    try {
      ucf.api.platform.nativeActions("GetRiseColor", "", {}, (info) => {
        resolve(info);
      });
    } catch (error) {
      resolve(VueCookies.get("riseColor") || "red");
    }
  });
};

export const previewPdf = (url) => {
  try {
    ChromeExternal.Execute("DownloadFile", url);
  } catch (e) {
    window.open(url);
  }
};

/**
 *
 * @param {获取用户信息} options
 *
 * 调用示例
 *    getUserinfo().then((userinfo) => {
        console.log(userinfo);
      });
 *
 */
export const getUserinfo = () => {
  try {
    return new Promise((resolve) => {
      try {
        ucf.api.session.getUser(function (info) {
          console.log(info);
          resolve(info);
        });
      } catch {
        const hrefArray = window.location.href.split("?");
        if (
          hrefArray[1] &&
          (queryString.parse(hrefArray[1]).ucode ||
            queryString.parse(hrefArray[1]).userid)
        ) {
          let userId =
            queryString.parse(hrefArray[1]).ucode ||
            queryString.parse(hrefArray[1]).userid;
          // cache.setLocal("appToken", appToken);
          resolve({ userId });
        } else {
          let userId = null;
          if (VueCookies.isKey("userId")) userId = VueCookies.get("userId");
          resolve({ userId });
        }
      }
    });
  } catch (error) {
    return null;
  }
};

/**
 * option = { file = 资源，filename = 文件名 }
 */

export const downloadfileSource = (options = null) => {
  try {
    if (!options.file) {
      return false;
    }
    ucf.api.net.download({
      base64: options.file.replace(/^data:image\/(png|jpg);base64,/, ""),
      filename: options.filename
        ? options.filename
        : `${moment().format("YYYYMMDD__hhmmss")}.png`,
    });
  } catch (error) {
    const a = document.createElement("a");
    const event = new MouseEvent("click");
    a.download = `${moment().format("YYYYMMDD__hhmmss")}.png`;
    a.href = options.file;
    a.dispatchEvent(event);
  }
};

/**
 * 模块跳转前 往目标页面传参数
 */

export const SetParam = (key = "", value = "") => {
  try {
    ucf.api.platform.setParam(key, value);
  } catch (e) {
    // console.log(e)
  }
};

/**
 * 模块跳转目标页面前取参数
 */

export const GetParam = (key) => {
  try {
    return ucf.api.platform.getParam(key);
  } catch (e) {
    // console.log(e)
  }
};

/**
 * 打开目标节点
 */

export const ExecuFunction = (code, params = {}) => {
  try {
    ucf.api.platform.executeFunctionByCode(code, params);
  } catch (e) {
    console.log("ucf.api.platform.executeFunctionByCode()", code, params);
    // alert('当前环境不支持，请在终端打开')
    // console.log(e)
  }
};

/**
 * 获取token
 */

export const getappToken = () => {
  let appToken = "";
  try {
    appToken = ucf.api.platform.getParam("Session");
  } catch (error) {
    const hrefArray = window.location.href.split("?");
    if (hrefArray[1] && queryString.parse(hrefArray[1]).token) {
      appToken = queryString.parse(hrefArray[1]).token;
      cache.setLocal("appToken", appToken);
    } else {
      appToken =
        cache.getLocal("appToken") || cache.getLocal("app_token") || "";
    }
  }

  return appToken;
};

/**
 * 调用一个接口功能
 * @param {string} actionName 接口名称（比如：打开新tab传 “newSector”）
 * @param {string} param1 参数1 目标地址
 * @param {object} param2 参数2 地址栏标题
 * @param {function} callback 回调函数
 *
 * 回调函数 根据R判断接口状态
 * R =5 新增板块和成份成功
 R =4 成份股增加失败
 R= 3 表示板块添加失败
 R= 2 表示板块名称已经存在
 R= 1 表示参数错误
 R= 0 表示正在处理
 *
 * 调用示例
 * nativeActions（“newSector”，“板块1”， {sector:["600570.SH","600999.SH"]}, javascriptCallback）
 *
 *
 */
export const nativeActions = (actionName, param1, param2, fn) => {
  try {
    ucf.api.platform.nativeActions(
      actionName,
      param1,
      removeHtmltag(param2),
      fn
    );
  } catch (error) {
    openpage({ url: param1 });
    console.log(
      "ucf.api.platform.nativeActions",
      actionName,
      param1,
      param2,
      fn
    );
  }
};

// 获取所有精选菜单
export const getChosenMenu = () => {
  try {
    return ucf.api.favorite.getChosenMenu();
  } catch (error) {
    console.log(error);
    return "[]";
  }
};

// 获取所有收藏菜单
export const getFavoriteMenu = () => {
  try {
    return ucf.api.favorite.getFavoriteMenu();
  } catch (error) {
    console.log(error);
    return "[]";
  }
};

// 查询主窗口当前激活TAB的title
// Int r = ucf.api.platform.nativeActions（“GetActiveTabTitle”，“”， {}, javascriptCallback）
// ActionName：为常量GetActiveTabTitle
// param1：“”
// param2：{}
// javascriptCallback ：接收登录信息回调

export const getActiveTabTitle = () => {
  return new Promise((resolve, reject) => {
    try {
      ucf.api.platform.nativeActions("GetActiveTabTitle", "", {}, (info) => {
        resolve(info);
      });
    } catch (error) {
      reject(error);
    }
  });
};
